package com.zmn.plat.services.impl.message;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.zmn.common.dto.StatusDTO;
import com.zmn.common.utils.date.DateUtil;
import com.zmn.common.utils.number.NumberUtil;
import com.zmn.plat.manager.constant.MsgTemplateConsts;
import com.zmn.plat.model.entity.message.MsgTemplate;
import com.zmn.plat.model.entity.message.MsgTemplateQuery;
import com.zmn.plat.persistence.interfaces.message.MsgTemplateDAO;
import com.zmn.plat.services.interfaces.message.MsgTemplateService;

/**
 * MsgTemplateConfigService 模板消息ServiceImpl
 *
 * @author tanghongjun
 */
@Service
public class MsgTemplateServiceImpl implements MsgTemplateService {

    @Resource
    MsgTemplateDAO msgTemplateDAO;

    @Override
    public MsgTemplate findByKey(Integer templateId) {
        return msgTemplateDAO.findByKey(templateId);
    }

    @Override
    public MsgTemplate findByGroupIdAndTypeAndChannelIdAndCityId(Integer groupId, Integer msgTempType, Integer channelId, Integer cityId) {
        // 模板组ID不能为空
        if (NumberUtil.isNullOrZero(groupId)) {
            return null;
        }

        // 如果类型不为通用，则渠道ID和城市ID不能同时为空
        if (msgTempType != MsgTemplateConsts.MSG_TEMP_TYPE_CURRENCY && NumberUtil.isNullOrZero(channelId) && NumberUtil.isNullOrZero(cityId)) {
            return null;
        }

        return msgTemplateDAO.findByGroupIdAndTypeAndChannelIdAndCityId(groupId, msgTempType, channelId, cityId);
    }

    @Override
    public Integer findKeyForMax() {
        return msgTemplateDAO.findKeyForMax();
    }

    @Override
    public List<MsgTemplate> listPageByQuery(MsgTemplateQuery query) {
        int count = msgTemplateDAO.countByQuery(query);
        query.setTotalCount(count);
        return msgTemplateDAO.listPageByQuery(query);
    }

    @Override
    public List<MsgTemplate> listByQuery(MsgTemplateQuery query) {
        return msgTemplateDAO.listByQuery(query);
    }

    @Override
    public List<MsgTemplate> listAll() {
        return msgTemplateDAO.listAll();
    }

    @Override
    public Integer countByQuery(MsgTemplateQuery query) {
        return msgTemplateDAO.countByQuery(query);
    }

    @Override
    public Integer updateByKey(MsgTemplate msgTemplate) {
        msgTemplate.setUpdateTime(DateUtil.getNow());
        return msgTemplateDAO.updateByKey(msgTemplate);
    }

    @Override
    public Integer updateBaseInfoByKey(MsgTemplate msgTemplate) {
        msgTemplate.setUpdateTime(DateUtil.getNow());
        return msgTemplateDAO.updateBaseInfoByKey(msgTemplate);
    }

    @Override
    public Integer updateContentByKey(MsgTemplate msgTemplate) {
        msgTemplate.setUpdateTime(DateUtil.getNow());
        return msgTemplateDAO.updateContentByKey(msgTemplate);
    }

    @Override
    public Integer updateStatus(MsgTemplate msgTemplate) {
        return msgTemplateDAO.updateStatus(msgTemplate);
    }

    @Override
    public Integer updateStatusBatch(StatusDTO dto) {
        return msgTemplateDAO.updateStatusBatch(dto);
    }

    @Override
    public int updateSortByKey(Integer templateId, Integer sort, String updater) {
        MsgTemplate msgTemplate = new MsgTemplate();
        msgTemplate.setTemplateId(templateId);
        msgTemplate.setSort(sort);
        msgTemplate.setUpdater(updater);
        msgTemplate.setUpdateTime(DateUtil.getNow());
        return msgTemplateDAO.updateSortByKey(msgTemplate);
    }

    @Override
    public Integer insert(MsgTemplate msgTemplate) {
        msgTemplate.setCreateTime(DateUtil.getNow());
        return msgTemplateDAO.insert(msgTemplate);
    }

    @Override
    public Integer deleteByKey(Integer templateId) {
        return msgTemplateDAO.deleteByKey(templateId);
    }
}
